package com.neusoft.chenhanhua.d0911;

public class Stringall {
	/**
	 * 	String：默认的字符串类，当内容变化时，不能修改内存中的数据，而将原来的地址抛弃，变化后的字符保存到新地址中
	 * 		缺点是在频繁修改的时候，内存消耗大。
	 * 		常用方法
	 * 			charAt(int index) 返回 char指定索引处的值。 
	 * 			length()：方法，获取字符串的长度，有一个面试题就是问数组与字符串的长度是方法还是属性？
	 * 			concat(String str) 将指定的字符串连接到该字符串的末尾。相当于+拼接 
	 * 			contains(CharSequence s) 当且仅当此字符串包含指定的char值序列时才返回true。 CharSequence是字符序列
	 * 				可以传String类型的值，这是Java多态的一个体现
	 * 			startWith(String suffix) endsWith(String suffix) 与JS一样
	 * 			equals(Object anObject) 将此字符串与指定对象进行比较。先进行地址比较，地址不一样且anObject是字符串再比较内容
	 * 			equalsIgnoreCase(String anotherString) 无视大小写
	 * 			indexOf(String ch) 
	 * 			isEmpty() 返回 true如果，且仅当 length()为 0 。 
	 * 			lastIndexOf(String ch) 
	 * 			matches(String regex) 与正则表达式有关
	 * 			replace(CharSequence target, CharSequence replacement)：替换指定的字符串内容，并返回新字符串对象
	 * 			split(String regex)：按regex分隔字符串，返回String数组
	 * 			substring(int beginIndex) 返回一个字符串，该字符串是此字符串的子字符串。  
	 * 			substring(int beginIndex, int endIndex)  
	 * 			toCharArray() 将此字符串转换为新的字符数组。
	 * 			toLowerCase() ：转换小写
	 * 			toUpperCase() ：转换为大写
	 * 			toString() ：在String类不需要关心，但在其它类中一定记住。所有的Sysout打印语句都打toString()方法的返回内容
	 * 			trim() ：去除左右空格
	 * 			valueOf()：将其它数据类型转换为String
	 * 	StringBuilder：
	 * 		直接修改地址中的内容，内存消耗不大。不支持同步，线程不安全
	 * 	StringBuffer
	 * 		直接修改地址中的内容，内存消耗不大，支持同步(synchronized)，线程安全
	 */
	
	
	public static void main(String[] args) {
		String s = "haha";//最常用的定义String的方式
		String s1 = new String("haha");
		String s2 = "haha";//最常用的定义String的方式
		System.out.println(s);
		System.out.println(s1);
		System.out.println(s == s1);
		System.out.println(s.equals(s1));
		System.out.println(s2 == s);
		System.out.println(s.charAt(1));

		System.out.println("字符串s的内容为：" + s + ", 长度为：" + s.length());
		System.out.println(String.format("字符串s的内容为：%s , 长度为：%d", s, s.length()));
	}
}
